import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.regex.Pattern;
import javax.swing.*;
 
 
public class Constraint extends JFrame {
        
    private JPanel container = new JPanel();
    private JTextField jtf;
    
    private JLabel label = new JLabel("Téléphone FR   ");
    private JButton b = new JButton ("OK");
    //Création de l'objet pattern dont nous allons nous servir pour 
    //tester le contenu de notre champ
    private Pattern regex;
    
    /**
     * Constructeur de l'objet 
     */
    public Constraint(){
        
    	//On initialise notre pattern
    	this.regex  = Pattern.compile("^0[0-689](-[\\d]{2}){4}$");
    	
        this.setTitle("Animation");
        this.setSize(300, 150);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
 
        container.setBackground(Color.white);
        container.setLayout(new BorderLayout());
        
        jtf = new JTextField();
        JPanel top = new JPanel();        
        
        Font police = new Font("Arial", Font.BOLD, 14);
        jtf.setFont(police);
        jtf.setPreferredSize(new Dimension(150, 30));
        jtf.setForeground(Color.BLUE);
        //On ajoute l'écouteur à notre composant
        jtf.addKeyListener(new ClavierListener());
        
        b.addActionListener(new BoutonListener());
        
        top.add(label);
        top.add(jtf);
        top.add(b);
       
        this.setContentPane(top);
        this.setVisible(true);            
     }       
        
    class BoutonListener implements ActionListener{ 
        @Override
        public void actionPerformed(ActionEvent e) {
                System.out.println("Téléphone FR  : " + jtf.getText());
                if(regex.matcher(jtf.getText()).matches()){
                	System.out.println("Numéro de téléphone OK ! !");
                	String str = jtf.getText().replaceAll("\\d", "X");
                	System.out.println("Après remplacement : " + str);
                }
                else{
                	System.out.println("Numéro de téléphone PAS OK ! !");
                	//Si la saisie est erronée
                	//On remplace tous les caractères alphabétiques par des 0
                	String str = jtf.getText().replaceAll("\\w", "0");
                	jtf.setText(str);
                	System.out.println("Après remplacement : " + str);
                }
        }  
    }    
    
    /**
     * Implémentataion de l'interface KeyListener
     * @author CHerby
     */
   class ClavierListener implements KeyListener{
    	
		public void keyReleased(KeyEvent event) {
			
			if(!isNumeric(event.getKeyChar())){
				jtf.setText(jtf.getText().replace(String.valueOf(event.getKeyChar()), ""));
			}			
		}
		
		//Inutile de redéfinir ces méthodes
		//Nous n'en avons plus l'utilité !
		public void keyPressed(KeyEvent event) {}
		public void keyTyped(KeyEvent event) {}
		
		/**
		 * Retourne vrai si le paramètre est numérique
		 * Retourne Faux dans le cas contraire
		 * @param carac
		 * @return Boolean
		 */
		private boolean isNumeric(char carac){
	    	try {
				Integer.parseInt(String.valueOf(carac));
			} catch (NumberFormatException e) {
				return false;				
			}
			return true;
	    }
    }


}
